using System;
using System.Text;
using System.Linq;
using DevExpress.ExpressApp;
using System.ComponentModel;
using DevExpress.ExpressApp.DC;
using System.Collections.Generic;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Updating;
using DevExpress.ExpressApp.Model.Core;
using DevExpress.ExpressApp.Model.DomainLogics;
using DevExpress.ExpressApp.Model.NodeGenerators;
using DevExpress.ExpressApp.Kpi;
using DevExpress.ExpressApp.ViewVariantsModule;
using DevExpress.ExpressApp.ConditionalAppearance;

namespace DomainComponents.XCRM
{
    // For more typical usage scenarios, be sure to check out http://documentation.devexpress.com/#Xaf/clsDevExpressExpressAppModuleBasetopic.
    public sealed partial class DomainComponentsXCRMModule : ModuleBase
    {
        public DomainComponentsXCRMModule()
        {
            InitializeComponent();

            RequiredModuleTypes.Add(typeof(DomainComponents.Common.DomainComponentsCommonModule));
            RequiredModuleTypes.Add(typeof(ConditionalAppearanceModule));
            RequiredModuleTypes.Add(typeof(ViewVariantsModule));
            RequiredModuleTypes.Add(typeof(KpiModule));
        }

        protected override IEnumerable<Type> GetDeclaredExportedTypes()
        {
            List<Type> declaredExportedTypes = new List<Type>(base.GetDeclaredExportedTypes());
            declaredExportedTypes.AddRange(KpiModule.GetKpiBusinessClasses());
            return declaredExportedTypes;
        }

        //public override IEnumerable<ModuleUpdater> GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB)
        //{
        //    ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB);
        //    return new ModuleUpdater[] { updater };
        //}
        public override void Setup(XafApplication application)
        {
            base.Setup(application);
            // Manage various aspects of the application UI and behavior at the module level.
        }
    }
}
